/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 */

#ifndef _MHI_HWIO_
#define _MHI_HWIO_

/* MHI register defintion */
#define MHI_CTRL_INT_STATUS_A7				(0x0004)
#define MHI_CTRL_INT_STATUS_A7_STATUS_MASK		0xffffffff
#define MHI_CTRL_INT_STATUS_A7_STATUS_SHIFT		0x0

#define MHI_CHDB_INT_STATUS_A7_n(n)			(0x0028 + 0x4 * (n))
#define MHI_CHDB_INT_STATUS_A7_n_STATUS_MASK		0xffffffff
#define MHI_CHDB_INT_STATUS_A7_n_STATUS_SHIFT		0x0

#define MHI_ERDB_INT_STATUS_A7_n(n)			(0x0038 + 0x4 * (n))
#define MHI_ERDB_INT_STATUS_A7_n_STATUS_MASK		0xffffffff
#define MHI_ERDB_INT_STATUS_A7_n_STATUS_SHIFT		0x0

#define MHI_CTRL_INT_CLEAR_A7				(0x004C)
#define MHI_CTRL_INT_CLEAR_A7_CLEAR_MASK		0xffffffff
#define MHI_CTRL_INT_CLEAR_A7_CLEAR_SHIFT		0x0
#define MHI_CTRL_INT_CRDB_CLEAR				BIT(1)
#define MHI_CTRL_INT_CRDB_MHICTRL_CLEAR			BIT(0)

#define MHI_CHDB_INT_CLEAR_A7_n(n)			(0x0070 + 0x4 * (n))
#define MHI_CHDB_INT_CLEAR_A7_n_CLEAR_MASK		0xffffffff
#define MHI_CHDB_INT_CLEAR_A7_n_CLEAR_SHIFT		0x0

#define MHI_ERDB_INT_CLEAR_A7_n(n)			(0x0080 + 0x4 * (n))
#define MHI_ERDB_INT_CLEAR_A7_n_CLEAR_MASK		0xffffffff
#define MHI_ERDB_INT_CLEAR_A7_n_CLEAR_SHIFT		0x0

#define MHI_CTRL_INT_MASK_A7				(0x0094)
#define MHI_CTRL_INT_MASK_A7_MASK_MASK			0x3
#define MHI_CTRL_INT_MASK_A7_MASK_SHIFT			0x0
#define MHI_CTRL_MHICTRL_MASK				BIT(0)
#define MHI_CTRL_MHICTRL_SHFT				0
#define MHI_CTRL_CRDB_MASK				BIT(1)
#define MHI_CTRL_CRDB_SHFT				1

#define MHI_CHDB_INT_MASK_A7_n(n)			(0x00B8 + 0x4 * (n))
#define MHI_CHDB_INT_MASK_A7_n_MASK_MASK		0xffffffff
#define MHI_CHDB_INT_MASK_A7_n_MASK_SHIFT		0x0

#define MHI_ERDB_INT_MASK_A7_n(n)			(0x00C8 + 0x4 * (n))
#define MHI_ERDB_INT_MASK_A7_n_MASK_MASK		0xffffffff
#define MHI_ERDB_INT_MASK_A7_n_MASK_SHIFT		0x0

#define MHIREGLEN					(0x0100)
#define MHIREGLEN_MHIREGLEN_MASK			0xffffffff
#define MHIREGLEN_MHIREGLEN_SHIFT			0x0

#define MHIVER						(0x0108)
#define MHIVER_MHIVER_MASK				0xffffffff
#define MHIVER_MHIVER_SHIFT				0x0

#define MHICFG						(0x0110)
#define MHICFG_RESERVED_BITS31_24_MASK			0xff000000
#define MHICFG_RESERVED_BITS31_24_SHIFT			0x18
#define MHICFG_NER_MASK					0xff0000
#define MHICFG_NER_SHIFT				0x10
#define MHICFG_RESERVED_BITS15_8_MASK			0xff00
#define MHICFG_RESERVED_BITS15_8_SHIFT			0x8
#define MHICFG_NCH_MASK					0xff
#define MHICFG_NCH_SHIFT				0x0

#define CHDBOFF						(0x0118)
#define CHDBOFF_CHDBOFF_MASK				0xffffffff
#define CHDBOFF_CHDBOFF_SHIFT				0x0

#define ERDBOFF						(0x0120)
#define ERDBOFF_ERDBOFF_MASK				0xffffffff
#define ERDBOFF_ERDBOFF_SHIFT				0x0

#define BHIOFF						(0x0128)
#define BHIOFF_BHIOFF_MASK				0xffffffff
#define BHIOFF_BHIOFF_SHIFT				0x0

#define DEBUGOFF					(0x0130)
#define DEBUGOFF_DEBUGOFF_MASK				0xffffffff
#define DEBUGOFF_DEBUGOFF_SHIFT				0x0

#define MHICTRL						(0x0138)
#define MHICTRL_MHISTATE_MASK				0x0000FF00
#define MHICTRL_MHISTATE_SHIFT				0x8
#define MHICTRL_RESET_MASK				0x2
#define MHICTRL_RESET_SHIFT				0x1

#define MHISTATUS					(0x0148)
#define MHISTATUS_MHISTATE_MASK				0x0000ff00
#define MHISTATUS_MHISTATE_SHIFT			0x8
#define MHISTATUS_SYSERR_MASK				0x4
#define MHISTATUS_SYSERR_SHIFT				0x2
#define MHISTATUS_READY_MASK				0x1
#define MHISTATUS_READY_SHIFT				0x0

#define CCABAP_LOWER					(0x0158)
#define CCABAP_LOWER_CCABAP_LOWER_MASK			0xffffffff
#define CCABAP_LOWER_CCABAP_LOWER_SHIFT			0x0

#define CCABAP_HIGHER					(0x015C)
#define CCABAP_HIGHER_CCABAP_HIGHER_MASK		0xffffffff
#define CCABAP_HIGHER_CCABAP_HIGHER_SHIFT		0x0

#define ECABAP_LOWER					(0x0160)
#define ECABAP_LOWER_ECABAP_LOWER_MASK			0xffffffff
#define ECABAP_LOWER_ECABAP_LOWER_SHIFT			0x0

#define ECABAP_HIGHER					(0x0164)
#define ECABAP_HIGHER_ECABAP_HIGHER_MASK		0xffffffff
#define ECABAP_HIGHER_ECABAP_HIGHER_SHIFT		0x0

#define CRCBAP_LOWER					(0x0168)
#define CRCBAP_LOWER_CRCBAP_LOWER_MASK			0xffffffff
#define CRCBAP_LOWER_CRCBAP_LOWER_SHIFT			0x0

#define CRCBAP_HIGHER					(0x016C)
#define CRCBAP_HIGHER_CRCBAP_HIGHER_MASK		0xffffffff
#define CRCBAP_HIGHER_CRCBAP_HIGHER_SHIFT		0x0

#define CRDB_LOWER					(0x0170)
#define CRDB_LOWER_CRDB_LOWER_MASK			0xffffffff
#define CRDB_LOWER_CRDB_LOWER_SHIFT			0x0

#define CRDB_HIGHER					(0x0174)
#define CRDB_HIGHER_CRDB_HIGHER_MASK			0xffffffff
#define CRDB_HIGHER_CRDB_HIGHER_SHIFT			0x0

#define MHICTRLBASE_LOWER				(0x0180)
#define MHICTRLBASE_LOWER_MHICTRLBASE_LOWER_MASK	0xffffffff
#define MHICTRLBASE_LOWER_MHICTRLBASE_LOWER_SHIFT	0x0

#define MHICTRLBASE_HIGHER				(0x0184)
#define MHICTRLBASE_HIGHER_MHICTRLBASE_HIGHER_MASK	0xffffffff
#define MHICTRLBASE_HIGHER_MHICTRLBASE_HIGHER_SHIFT	0x0

#define MHICTRLLIMIT_LOWER				(0x0188)
#define MHICTRLLIMIT_LOWER_MHICTRLLIMIT_LOWER_MASK	0xffffffff
#define MHICTRLLIMIT_LOWER_MHICTRLLIMIT_LOWER_SHIFT	0x0

#define MHICTRLLIMIT_HIGHER				(0x018C)
#define MHICTRLLIMIT_HIGHER_MHICTRLLIMIT_HIGHER_MASK	0xffffffff
#define MHICTRLLIMIT_HIGHER_MHICTRLLIMIT_HIGHER_SHIFT	0x0

#define MHIDATABASE_LOWER				(0x0198)
#define MHIDATABASE_LOWER_MHIDATABASE_LOWER_MASK	0xffffffff
#define MHIDATABASE_LOWER_MHIDATABASE_LOWER_SHIFT	0x0

#define MHIDATABASE_HIGHER				(0x019C)
#define MHIDATABASE_HIGHER_MHIDATABASE_HIGHER_MASK	0xffffffff
#define MHIDATABASE_HIGHER_MHIDATABASE_HIGHER_SHIFT	0x0

#define MHIDATALIMIT_LOWER				(0x01A0)
#define MHIDATALIMIT_LOWER_MHIDATALIMIT_LOWER_MASK	0xffffffff
#define MHIDATALIMIT_LOWER_MHIDATALIMIT_LOWER_SHIFT	0x0

#define MHIDATALIMIT_HIGHER				(0x01A4)
#define MHIDATALIMIT_HIGHER_MHIDATALIMIT_HIGHER_MASK	0xffffffff
#define MHIDATALIMIT_HIGHER_MHIDATALIMIT_HIGHER_SHIFT	0x0

#define CHDB_LOWER_n(n)					(0x0400 + 0x8 * (n))
#define CHDB_LOWER_n_CHDB_LOWER_MASK			0xffffffff
#define CHDB_LOWER_n_CHDB_LOWER_SHIFT			0x0

#define CHDB_HIGHER_n(n)				(0x0404 + 0x8 * (n))
#define CHDB_HIGHER_n_CHDB_HIGHER_MASK			0xffffffff
#define CHDB_HIGHER_n_CHDB_HIGHER_SHIFT			0x0

#define ERDB_LOWER_n(n)					(0x0800 + 0x8 * (n))
#define ERDB_LOWER_n_ERDB_LOWER_MASK			0xffffffff
#define ERDB_LOWER_n_ERDB_LOWER_SHIFT			0x0

#define ERDB_HIGHER_n(n)				(0x0804 + 0x8 * (n))
#define ERDB_HIGHER_n_ERDB_HIGHER_MASK			0xffffffff
#define ERDB_HIGHER_n_ERDB_HIGHER_SHIFT			0x0

#define BHI_EXECENV					(0x228)
#define BHI_EXECENV_MASK				0xFFFFFFFF
#define BHI_EXECENV_SHIFT				0

#endif
